<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Caffe: caffe::RecurrentLayer&lt; Dtype &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Caffe
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespacecaffe.html">caffe</a></li><li class="navelem"><a class="el" href="classcaffe_1_1RecurrentLayer.html">RecurrentLayer</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classcaffe_1_1RecurrentLayer-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">caffe::RecurrentLayer&lt; Dtype &gt; Class Template Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
</div><!--header-->
<div class="contents">

<p>An abstract class for implementing recurrent behavior inside of an unrolled network. This <a class="el" href="classcaffe_1_1Layer.html" title="An interface for the units of computation which can be composed into a Net. ">Layer</a> type cannot be instantiated &ndash; instead, you should use one of its implementations which defines the recurrent architecture, such as <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> or <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a>.  
 <a href="classcaffe_1_1RecurrentLayer.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="recurrent__layer_8hpp_source.html">recurrent_layer.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for caffe::RecurrentLayer&lt; Dtype &gt;:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classcaffe_1_1RecurrentLayer.png" usemap="#caffe::RecurrentLayer_3C_20Dtype_20_3E_map" alt=""/>
  <map id="caffe::RecurrentLayer_3C_20Dtype_20_3E_map" name="caffe::RecurrentLayer_3C_20Dtype_20_3E_map">
<area href="classcaffe_1_1Layer.html" title="An interface for the units of computation which can be composed into a Net. " alt="caffe::Layer&lt; Dtype &gt;" shape="rect" coords="101,0,294,24"/>
<area href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ..." alt="caffe::LSTMLayer&lt; Dtype &gt;" shape="rect" coords="0,112,193,136"/>
<area href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network..." alt="caffe::RNNLayer&lt; Dtype &gt;" shape="rect" coords="203,112,396,136"/>
</map>
 </div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a3f02919dbb32c07c89bfda4ea68c09df"><td class="memItemLeft" align="right" valign="top"><a id="a3f02919dbb32c07c89bfda4ea68c09df"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>RecurrentLayer</b> (const LayerParameter &amp;param)</td></tr>
<tr class="separator:a3f02919dbb32c07c89bfda4ea68c09df"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4eec13bfbe23b1e3eb2bbc4652bd6952"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a4eec13bfbe23b1e3eb2bbc4652bd6952">LayerSetUp</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:a4eec13bfbe23b1e3eb2bbc4652bd6952"><td class="mdescLeft">&#160;</td><td class="mdescRight">Does layer-specific setup: your layer should implement this function as well as Reshape.  <a href="#a4eec13bfbe23b1e3eb2bbc4652bd6952">More...</a><br /></td></tr>
<tr class="separator:a4eec13bfbe23b1e3eb2bbc4652bd6952"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba6011a9cbb18e38a8596aa5dbb44723"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#aba6011a9cbb18e38a8596aa5dbb44723">Reshape</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:aba6011a9cbb18e38a8596aa5dbb44723"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adjust the shapes of top blobs and internal buffers to accommodate the shapes of the bottom blobs.  <a href="#aba6011a9cbb18e38a8596aa5dbb44723">More...</a><br /></td></tr>
<tr class="separator:aba6011a9cbb18e38a8596aa5dbb44723"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f0bf24a571da40f490b9b78a51d9393"><td class="memItemLeft" align="right" valign="top"><a id="a9f0bf24a571da40f490b9b78a51d9393"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>Reset</b> ()</td></tr>
<tr class="separator:a9f0bf24a571da40f490b9b78a51d9393"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc0b925b8bf94a795c9ff84f411e70a3"><td class="memItemLeft" align="right" valign="top"><a id="afc0b925b8bf94a795c9ff84f411e70a3"></a>
virtual const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#afc0b925b8bf94a795c9ff84f411e70a3">type</a> () const</td></tr>
<tr class="memdesc:afc0b925b8bf94a795c9ff84f411e70a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the layer type. <br /></td></tr>
<tr class="separator:afc0b925b8bf94a795c9ff84f411e70a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac31b705bc02d333ae768f7c2184fbfae"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#ac31b705bc02d333ae768f7c2184fbfae">MinBottomBlobs</a> () const</td></tr>
<tr class="memdesc:ac31b705bc02d333ae768f7c2184fbfae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the minimum number of bottom blobs required by the layer, or -1 if no minimum number is required.  <a href="#ac31b705bc02d333ae768f7c2184fbfae">More...</a><br /></td></tr>
<tr class="separator:ac31b705bc02d333ae768f7c2184fbfae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a983e1ead91884f9d2049a3000254961c"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a983e1ead91884f9d2049a3000254961c">MaxBottomBlobs</a> () const</td></tr>
<tr class="memdesc:a983e1ead91884f9d2049a3000254961c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the maximum number of bottom blobs required by the layer, or -1 if no maximum number is required.  <a href="#a983e1ead91884f9d2049a3000254961c">More...</a><br /></td></tr>
<tr class="separator:a983e1ead91884f9d2049a3000254961c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4cb9032f0942c0fef5f6c7094c7b2ab8"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a4cb9032f0942c0fef5f6c7094c7b2ab8">ExactNumTopBlobs</a> () const</td></tr>
<tr class="memdesc:a4cb9032f0942c0fef5f6c7094c7b2ab8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the exact number of top blobs required by the layer, or -1 if no exact number is required.  <a href="#a4cb9032f0942c0fef5f6c7094c7b2ab8">More...</a><br /></td></tr>
<tr class="separator:a4cb9032f0942c0fef5f6c7094c7b2ab8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8d91610cc8b9615a1db4f07fe5590a37"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a8d91610cc8b9615a1db4f07fe5590a37">AllowForceBackward</a> (const int bottom_index) const</td></tr>
<tr class="memdesc:a8d91610cc8b9615a1db4f07fe5590a37"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return whether to allow force_backward for a given bottom blob index.  <a href="#a8d91610cc8b9615a1db4f07fe5590a37">More...</a><br /></td></tr>
<tr class="separator:a8d91610cc8b9615a1db4f07fe5590a37"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classcaffe_1_1Layer"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classcaffe_1_1Layer')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classcaffe_1_1Layer.html">caffe::Layer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:a7b4e4ccea08c7b8b15acc6829d5735f6 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a7b4e4ccea08c7b8b15acc6829d5735f6">Layer</a> (const LayerParameter &amp;param)</td></tr>
<tr class="separator:a7b4e4ccea08c7b8b15acc6829d5735f6 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18d6bfdb535ab8e96a971dec4ae39a84 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a18d6bfdb535ab8e96a971dec4ae39a84">SetUp</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:a18d6bfdb535ab8e96a971dec4ae39a84 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements common layer setup functionality.  <a href="classcaffe_1_1Layer.html#a18d6bfdb535ab8e96a971dec4ae39a84">More...</a><br /></td></tr>
<tr class="separator:a18d6bfdb535ab8e96a971dec4ae39a84 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab57d272dabe8c709d2a785eebe72ca57 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">Dtype&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#ab57d272dabe8c709d2a785eebe72ca57">Forward</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:ab57d272dabe8c709d2a785eebe72ca57 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the bottom blobs, compute the top blobs and the loss.  <a href="classcaffe_1_1Layer.html#ab57d272dabe8c709d2a785eebe72ca57">More...</a><br /></td></tr>
<tr class="separator:ab57d272dabe8c709d2a785eebe72ca57 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a183d343f5183a4762307f2c5e6ed1e12 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a183d343f5183a4762307f2c5e6ed1e12">Backward</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top, const vector&lt; bool &gt; &amp;propagate_down, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom)</td></tr>
<tr class="memdesc:a183d343f5183a4762307f2c5e6ed1e12 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the top blob error gradients, compute the bottom blob error gradients.  <a href="classcaffe_1_1Layer.html#a183d343f5183a4762307f2c5e6ed1e12">More...</a><br /></td></tr>
<tr class="separator:a183d343f5183a4762307f2c5e6ed1e12 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf4524ce8641a30a8a4784aee1b2b4c8 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="aaf4524ce8641a30a8a4784aee1b2b4c8"></a>
vector&lt; shared_ptr&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; &gt; &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#aaf4524ce8641a30a8a4784aee1b2b4c8">blobs</a> ()</td></tr>
<tr class="memdesc:aaf4524ce8641a30a8a4784aee1b2b4c8 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the vector of learnable parameter blobs. <br /></td></tr>
<tr class="separator:aaf4524ce8641a30a8a4784aee1b2b4c8 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adff82274f146e2b6922d0ebac2aaf215 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="adff82274f146e2b6922d0ebac2aaf215"></a>
const LayerParameter &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#adff82274f146e2b6922d0ebac2aaf215">layer_param</a> () const</td></tr>
<tr class="memdesc:adff82274f146e2b6922d0ebac2aaf215 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the layer parameter. <br /></td></tr>
<tr class="separator:adff82274f146e2b6922d0ebac2aaf215 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4a1754828dda22cc8daa2f63377f3579 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a4a1754828dda22cc8daa2f63377f3579"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a4a1754828dda22cc8daa2f63377f3579">ToProto</a> (LayerParameter *param, bool write_diff=false)</td></tr>
<tr class="memdesc:a4a1754828dda22cc8daa2f63377f3579 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes the layer parameter to a protocol buffer. <br /></td></tr>
<tr class="separator:a4a1754828dda22cc8daa2f63377f3579 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a899410336f30821644c8bd6c69a070c9 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a899410336f30821644c8bd6c69a070c9"></a>
Dtype&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a899410336f30821644c8bd6c69a070c9">loss</a> (const int top_index) const</td></tr>
<tr class="memdesc:a899410336f30821644c8bd6c69a070c9 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the scalar loss associated with a top blob at a given index. <br /></td></tr>
<tr class="separator:a899410336f30821644c8bd6c69a070c9 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a899b09f4b91ada8545b3a43ee91e0d69 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a899b09f4b91ada8545b3a43ee91e0d69"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a899b09f4b91ada8545b3a43ee91e0d69">set_loss</a> (const int top_index, const Dtype value)</td></tr>
<tr class="memdesc:a899b09f4b91ada8545b3a43ee91e0d69 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the loss associated with a top blob at a given index. <br /></td></tr>
<tr class="separator:a899b09f4b91ada8545b3a43ee91e0d69 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e5ee0494d85f5f55fc4396537cbc60f inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a8e5ee0494d85f5f55fc4396537cbc60f">ExactNumBottomBlobs</a> () const</td></tr>
<tr class="memdesc:a8e5ee0494d85f5f55fc4396537cbc60f inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the exact number of bottom blobs required by the layer, or -1 if no exact number is required.  <a href="classcaffe_1_1Layer.html#a8e5ee0494d85f5f55fc4396537cbc60f">More...</a><br /></td></tr>
<tr class="separator:a8e5ee0494d85f5f55fc4396537cbc60f inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9e4c8d642e413948b131d851a8462a4 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#ab9e4c8d642e413948b131d851a8462a4">MinTopBlobs</a> () const</td></tr>
<tr class="memdesc:ab9e4c8d642e413948b131d851a8462a4 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the minimum number of top blobs required by the layer, or -1 if no minimum number is required.  <a href="classcaffe_1_1Layer.html#ab9e4c8d642e413948b131d851a8462a4">More...</a><br /></td></tr>
<tr class="separator:ab9e4c8d642e413948b131d851a8462a4 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6c03df0b6e40e776c94001e19994a2e inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#ac6c03df0b6e40e776c94001e19994a2e">MaxTopBlobs</a> () const</td></tr>
<tr class="memdesc:ac6c03df0b6e40e776c94001e19994a2e inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the maximum number of top blobs required by the layer, or -1 if no maximum number is required.  <a href="classcaffe_1_1Layer.html#ac6c03df0b6e40e776c94001e19994a2e">More...</a><br /></td></tr>
<tr class="separator:ac6c03df0b6e40e776c94001e19994a2e inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af452a938bc7596f9b5e9900c8dc4ab3d inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#af452a938bc7596f9b5e9900c8dc4ab3d">EqualNumBottomTopBlobs</a> () const</td></tr>
<tr class="memdesc:af452a938bc7596f9b5e9900c8dc4ab3d inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if the layer requires an equal number of bottom and top blobs.  <a href="classcaffe_1_1Layer.html#af452a938bc7596f9b5e9900c8dc4ab3d">More...</a><br /></td></tr>
<tr class="separator:af452a938bc7596f9b5e9900c8dc4ab3d inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50130669e230a168d1f8fbbb8171f054 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a50130669e230a168d1f8fbbb8171f054">AutoTopBlobs</a> () const</td></tr>
<tr class="memdesc:a50130669e230a168d1f8fbbb8171f054 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return whether "anonymous" top blobs are created automatically by the layer.  <a href="classcaffe_1_1Layer.html#a50130669e230a168d1f8fbbb8171f054">More...</a><br /></td></tr>
<tr class="separator:a50130669e230a168d1f8fbbb8171f054 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a3708013b0231e71d725252e10ce6e3 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a1a3708013b0231e71d725252e10ce6e3">param_propagate_down</a> (const int param_id)</td></tr>
<tr class="memdesc:a1a3708013b0231e71d725252e10ce6e3 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specifies whether the layer should compute gradients w.r.t. a parameter at a particular index given by param_id.  <a href="classcaffe_1_1Layer.html#a1a3708013b0231e71d725252e10ce6e3">More...</a><br /></td></tr>
<tr class="separator:a1a3708013b0231e71d725252e10ce6e3 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a6fcb843803ed556f0a69cc2864379b inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a9a6fcb843803ed556f0a69cc2864379b"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a9a6fcb843803ed556f0a69cc2864379b">set_param_propagate_down</a> (const int param_id, const bool value)</td></tr>
<tr class="memdesc:a9a6fcb843803ed556f0a69cc2864379b inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets whether the layer should compute gradients w.r.t. a parameter at a particular index given by param_id. <br /></td></tr>
<tr class="separator:a9a6fcb843803ed556f0a69cc2864379b inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a04a3a032c4d0be559d88865a13a2d927"><td class="memItemLeft" align="right" valign="top"><a id="a04a3a032c4d0be559d88865a13a2d927"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a04a3a032c4d0be559d88865a13a2d927">FillUnrolledNet</a> (NetParameter *net_param) const =0</td></tr>
<tr class="memdesc:a04a3a032c4d0be559d88865a13a2d927"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills net_param with the recurrent network architecture. Subclasses should define this &ndash; see <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> and <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a> for examples. <br /></td></tr>
<tr class="separator:a04a3a032c4d0be559d88865a13a2d927"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d9dab800f838e38651678718adfbbf6"><td class="memItemLeft" align="right" valign="top"><a id="a9d9dab800f838e38651678718adfbbf6"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a9d9dab800f838e38651678718adfbbf6">RecurrentInputBlobNames</a> (vector&lt; string &gt; *names) const =0</td></tr>
<tr class="memdesc:a9d9dab800f838e38651678718adfbbf6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills names with the names of the 0th timestep recurrent input <a class="el" href="classcaffe_1_1Blob.html" title="A wrapper around SyncedMemory holders serving as the basic computational unit through which Layers...">Blob</a>&amp;s. Subclasses should define this &ndash; see <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> and <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a> for examples. <br /></td></tr>
<tr class="separator:a9d9dab800f838e38651678718adfbbf6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad2c2427c11960e0b8961c31ff2f74c03"><td class="memItemLeft" align="right" valign="top"><a id="ad2c2427c11960e0b8961c31ff2f74c03"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#ad2c2427c11960e0b8961c31ff2f74c03">RecurrentInputShapes</a> (vector&lt; BlobShape &gt; *shapes) const =0</td></tr>
<tr class="memdesc:ad2c2427c11960e0b8961c31ff2f74c03"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills shapes with the shapes of the recurrent input <a class="el" href="classcaffe_1_1Blob.html" title="A wrapper around SyncedMemory holders serving as the basic computational unit through which Layers...">Blob</a>&amp;s. Subclasses should define this &ndash; see <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> and <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a> for examples. <br /></td></tr>
<tr class="separator:ad2c2427c11960e0b8961c31ff2f74c03"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5fd43ae201c4284a1cc3d93f72702bbe"><td class="memItemLeft" align="right" valign="top"><a id="a5fd43ae201c4284a1cc3d93f72702bbe"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a5fd43ae201c4284a1cc3d93f72702bbe">RecurrentOutputBlobNames</a> (vector&lt; string &gt; *names) const =0</td></tr>
<tr class="memdesc:a5fd43ae201c4284a1cc3d93f72702bbe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills names with the names of the Tth timestep recurrent output <a class="el" href="classcaffe_1_1Blob.html" title="A wrapper around SyncedMemory holders serving as the basic computational unit through which Layers...">Blob</a>&amp;s. Subclasses should define this &ndash; see <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> and <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a> for examples. <br /></td></tr>
<tr class="separator:a5fd43ae201c4284a1cc3d93f72702bbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0b87f8e9a422338243ffeb7f16121fa"><td class="memItemLeft" align="right" valign="top"><a id="af0b87f8e9a422338243ffeb7f16121fa"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#af0b87f8e9a422338243ffeb7f16121fa">OutputBlobNames</a> (vector&lt; string &gt; *names) const =0</td></tr>
<tr class="memdesc:af0b87f8e9a422338243ffeb7f16121fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills names with the names of the output blobs, concatenated across all timesteps. Should return a name for each top <a class="el" href="classcaffe_1_1Blob.html" title="A wrapper around SyncedMemory holders serving as the basic computational unit through which Layers...">Blob</a>. Subclasses should define this &ndash; see <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> and <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a> for examples. <br /></td></tr>
<tr class="separator:af0b87f8e9a422338243ffeb7f16121fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f0e34d7534fac027c640e66f55a18d2"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a9f0e34d7534fac027c640e66f55a18d2">Forward_cpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="separator:a9f0e34d7534fac027c640e66f55a18d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb4cdbb38b24d2a2ccb14cebc4e1018b"><td class="memItemLeft" align="right" valign="top"><a id="afb4cdbb38b24d2a2ccb14cebc4e1018b"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#afb4cdbb38b24d2a2ccb14cebc4e1018b">Forward_gpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:afb4cdbb38b24d2a2ccb14cebc4e1018b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Using the GPU device, compute the layer output. Fall back to <a class="el" href="classcaffe_1_1RecurrentLayer.html#a9f0e34d7534fac027c640e66f55a18d2">Forward_cpu()</a> if unavailable. <br /></td></tr>
<tr class="separator:afb4cdbb38b24d2a2ccb14cebc4e1018b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a634f73d33c81cc8f8486659998ed45c6"><td class="memItemLeft" align="right" valign="top"><a id="a634f73d33c81cc8f8486659998ed45c6"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a634f73d33c81cc8f8486659998ed45c6">Backward_cpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top, const vector&lt; bool &gt; &amp;propagate_down, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom)</td></tr>
<tr class="memdesc:a634f73d33c81cc8f8486659998ed45c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Using the CPU device, compute the gradients for any parameters and for the bottom blobs if propagate_down is true. <br /></td></tr>
<tr class="separator:a634f73d33c81cc8f8486659998ed45c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classcaffe_1_1Layer"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classcaffe_1_1Layer')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classcaffe_1_1Layer.html">caffe::Layer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:a6faee52af6250a38d1b879008257f5a7 inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a6faee52af6250a38d1b879008257f5a7"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a6faee52af6250a38d1b879008257f5a7">Backward_gpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top, const vector&lt; bool &gt; &amp;propagate_down, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom)</td></tr>
<tr class="memdesc:a6faee52af6250a38d1b879008257f5a7 inherit pro_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Using the GPU device, compute the gradients for any parameters and for the bottom blobs if propagate_down is true. Fall back to <a class="el" href="classcaffe_1_1Layer.html#a75c9b2a321dc713e0eaef530d02dc37f" title="Using the CPU device, compute the gradients for any parameters and for the bottom blobs if propagate_...">Backward_cpu()</a> if unavailable. <br /></td></tr>
<tr class="separator:a6faee52af6250a38d1b879008257f5a7 inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a55c8036130225fbc874a986bdf4b27e2 inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a55c8036130225fbc874a986bdf4b27e2">CheckBlobCounts</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="separator:a55c8036130225fbc874a986bdf4b27e2 inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04eb2a3d1d59c64cd64c233217d5d6fc inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a04eb2a3d1d59c64cd64c233217d5d6fc">SetLossWeights</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="separator:a04eb2a3d1d59c64cd64c233217d5d6fc inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:aa9b6cb6658e3bc8bfdf39441e751919a"><td class="memItemLeft" align="right" valign="top"><a id="aa9b6cb6658e3bc8bfdf39441e751919a"></a>
shared_ptr&lt; <a class="el" href="classcaffe_1_1Net.html">Net</a>&lt; Dtype &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#aa9b6cb6658e3bc8bfdf39441e751919a">unrolled_net_</a></td></tr>
<tr class="memdesc:aa9b6cb6658e3bc8bfdf39441e751919a"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="classcaffe_1_1Net.html" title="Connects Layers together into a directed acyclic graph (DAG) specified by a NetParameter. ">Net</a> to implement the Recurrent functionality. <br /></td></tr>
<tr class="separator:aa9b6cb6658e3bc8bfdf39441e751919a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4bf3c3a87b2a740987aec46e40717907"><td class="memItemLeft" align="right" valign="top"><a id="a4bf3c3a87b2a740987aec46e40717907"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a4bf3c3a87b2a740987aec46e40717907">N_</a></td></tr>
<tr class="memdesc:a4bf3c3a87b2a740987aec46e40717907"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of independent streams to process simultaneously. <br /></td></tr>
<tr class="separator:a4bf3c3a87b2a740987aec46e40717907"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a02f79bca0ccde7543ecf172b328c860f"><td class="memItemLeft" align="right" valign="top"><a id="a02f79bca0ccde7543ecf172b328c860f"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a02f79bca0ccde7543ecf172b328c860f">T_</a></td></tr>
<tr class="memdesc:a02f79bca0ccde7543ecf172b328c860f"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of timesteps in the layer's input, and the number of timesteps over which to backpropagate through time. <br /></td></tr>
<tr class="separator:a02f79bca0ccde7543ecf172b328c860f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7da45d2f90a99fe6e4250ffa6a533d97"><td class="memItemLeft" align="right" valign="top"><a id="a7da45d2f90a99fe6e4250ffa6a533d97"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a7da45d2f90a99fe6e4250ffa6a533d97">static_input_</a></td></tr>
<tr class="memdesc:a7da45d2f90a99fe6e4250ffa6a533d97"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the layer has a "static" input copied across all timesteps. <br /></td></tr>
<tr class="separator:a7da45d2f90a99fe6e4250ffa6a533d97"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0a7a7d94ed74d4199b9d7b8445d5aadb"><td class="memItemLeft" align="right" valign="top"><a id="a0a7a7d94ed74d4199b9d7b8445d5aadb"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a0a7a7d94ed74d4199b9d7b8445d5aadb">last_layer_index_</a></td></tr>
<tr class="memdesc:a0a7a7d94ed74d4199b9d7b8445d5aadb"><td class="mdescLeft">&#160;</td><td class="mdescRight">The last layer to run in the network. (Any later layers are losses added to force the recurrent net to do backprop.) <br /></td></tr>
<tr class="separator:a0a7a7d94ed74d4199b9d7b8445d5aadb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abfafaacb1fece0309e750e0d307fb76e"><td class="memItemLeft" align="right" valign="top"><a id="abfafaacb1fece0309e750e0d307fb76e"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#abfafaacb1fece0309e750e0d307fb76e">expose_hidden_</a></td></tr>
<tr class="memdesc:abfafaacb1fece0309e750e0d307fb76e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the layer's hidden state at the first and last timesteps are layer inputs and outputs, respectively. <br /></td></tr>
<tr class="separator:abfafaacb1fece0309e750e0d307fb76e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9da1173c6ccdb913c5a8ac8f4ca7f891"><td class="memItemLeft" align="right" valign="top"><a id="a9da1173c6ccdb913c5a8ac8f4ca7f891"></a>
vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt;&#160;</td><td class="memItemRight" valign="bottom"><b>recur_input_blobs_</b></td></tr>
<tr class="separator:a9da1173c6ccdb913c5a8ac8f4ca7f891"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a53b1f9cd694e7dfcae00774ddfef0222"><td class="memItemLeft" align="right" valign="top"><a id="a53b1f9cd694e7dfcae00774ddfef0222"></a>
vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt;&#160;</td><td class="memItemRight" valign="bottom"><b>recur_output_blobs_</b></td></tr>
<tr class="separator:a53b1f9cd694e7dfcae00774ddfef0222"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0b7323dd7121854d05f85847e2f86c4"><td class="memItemLeft" align="right" valign="top"><a id="ae0b7323dd7121854d05f85847e2f86c4"></a>
vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt;&#160;</td><td class="memItemRight" valign="bottom"><b>output_blobs_</b></td></tr>
<tr class="separator:ae0b7323dd7121854d05f85847e2f86c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af32cf697eeee1edd5de1d7b359602ec2"><td class="memItemLeft" align="right" valign="top"><a id="af32cf697eeee1edd5de1d7b359602ec2"></a>
<a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&#160;</td><td class="memItemRight" valign="bottom"><b>x_input_blob_</b></td></tr>
<tr class="separator:af32cf697eeee1edd5de1d7b359602ec2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa918e06200e98287778abc5f3d97eeb1"><td class="memItemLeft" align="right" valign="top"><a id="aa918e06200e98287778abc5f3d97eeb1"></a>
<a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&#160;</td><td class="memItemRight" valign="bottom"><b>x_static_input_blob_</b></td></tr>
<tr class="separator:aa918e06200e98287778abc5f3d97eeb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3b5f3118aa5a48d54fb624c04b98bd1d"><td class="memItemLeft" align="right" valign="top"><a id="a3b5f3118aa5a48d54fb624c04b98bd1d"></a>
<a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&#160;</td><td class="memItemRight" valign="bottom"><b>cont_input_blob_</b></td></tr>
<tr class="separator:a3b5f3118aa5a48d54fb624c04b98bd1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classcaffe_1_1Layer"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classcaffe_1_1Layer')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classcaffe_1_1Layer.html">caffe::Layer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:a7ed12bb2df25c887e41d7ea9557fc701 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">LayerParameter&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a7ed12bb2df25c887e41d7ea9557fc701">layer_param_</a></td></tr>
<tr class="separator:a7ed12bb2df25c887e41d7ea9557fc701 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1d04ad7f595a82a1c811f102d68b8a19 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">Phase&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a1d04ad7f595a82a1c811f102d68b8a19">phase_</a></td></tr>
<tr class="separator:a1d04ad7f595a82a1c811f102d68b8a19 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8073fcf2c139b47eb99ce71b346b1321 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">vector&lt; shared_ptr&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a8073fcf2c139b47eb99ce71b346b1321">blobs_</a></td></tr>
<tr class="separator:a8073fcf2c139b47eb99ce71b346b1321 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd4a05def9ff3b42ad72404210613ef7 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">vector&lt; bool &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#acd4a05def9ff3b42ad72404210613ef7">param_propagate_down_</a></td></tr>
<tr class="separator:acd4a05def9ff3b42ad72404210613ef7 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6d347229a139500994e7a926c680486 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">vector&lt; Dtype &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#af6d347229a139500994e7a926c680486">loss_</a></td></tr>
<tr class="separator:af6d347229a139500994e7a926c680486 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename Dtype&gt;<br />
class caffe::RecurrentLayer&lt; Dtype &gt;</h3>

<p>An abstract class for implementing recurrent behavior inside of an unrolled network. This <a class="el" href="classcaffe_1_1Layer.html" title="An interface for the units of computation which can be composed into a Net. ">Layer</a> type cannot be instantiated &ndash; instead, you should use one of its implementations which defines the recurrent architecture, such as <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> or <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a>. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a8d91610cc8b9615a1db4f07fe5590a37"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8d91610cc8b9615a1db4f07fe5590a37">&#9670;&nbsp;</a></span>AllowForceBackward()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool <a class="el" href="classcaffe_1_1RecurrentLayer.html">caffe::RecurrentLayer</a>&lt; Dtype &gt;::AllowForceBackward </td>
          <td>(</td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>bottom_index</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Return whether to allow force_backward for a given bottom blob index. </p>
<p>If AllowForceBackward(i) == false, we will ignore the force_backward setting and backpropagate to blob i only if it needs gradient information (as is done when force_backward == false). </p>

<p>Reimplemented from <a class="el" href="classcaffe_1_1Layer.html#a1c0b2bffcd6d57e4bd49f820941badb6">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<a id="a4cb9032f0942c0fef5f6c7094c7b2ab8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4cb9032f0942c0fef5f6c7094c7b2ab8">&#9670;&nbsp;</a></span>ExactNumTopBlobs()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual int <a class="el" href="classcaffe_1_1RecurrentLayer.html">caffe::RecurrentLayer</a>&lt; Dtype &gt;::ExactNumTopBlobs </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the exact number of top blobs required by the layer, or -1 if no exact number is required. </p>
<p>This method should be overridden to return a non-negative value if your layer expects some exact number of top blobs. </p>

<p>Reimplemented from <a class="el" href="classcaffe_1_1Layer.html#a64e2ca72c719e4b2f1f9216ccfb0d37f">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<a id="a9f0e34d7534fac027c640e66f55a18d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9f0e34d7534fac027c640e66f55a18d2">&#9670;&nbsp;</a></span>Forward_cpu()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classcaffe_1_1RecurrentLayer.html">caffe::RecurrentLayer</a>&lt; Dtype &gt;::Forward_cpu </td>
          <td>(</td>
          <td class="paramtype">const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;&#160;</td>
          <td class="paramname"><em>bottom</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;&#160;</td>
          <td class="paramname"><em>top</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">bottom</td><td>input <a class="el" href="classcaffe_1_1Blob.html" title="A wrapper around SyncedMemory holders serving as the basic computational unit through which Layers...">Blob</a> vector (length 2-3)</td></tr>
  </table>
  </dd>
</dl>
<ol type="1">
<li><img class="formulaInl" alt="$ (T \times N \times ...) $" src="form_135.png"/> the time-varying input <img class="formulaInl" alt="$ x $" src="form_11.png"/>. After the first two axes, whose dimensions must correspond to the number of timesteps <img class="formulaInl" alt="$ T $" src="form_136.png"/> and the number of independent streams <img class="formulaInl" alt="$ N $" src="form_137.png"/>, respectively, its dimensions may be arbitrary. Note that the ordering of dimensions &ndash; <img class="formulaInl" alt="$ (T \times N \times ...) $" src="form_135.png"/>, rather than <img class="formulaInl" alt="$ (N \times T \times ...) $" src="form_138.png"/> &ndash; means that the <img class="formulaInl" alt="$ N $" src="form_137.png"/> independent input streams must be "interleaved".</li>
<li><img class="formulaInl" alt="$ (T \times N) $" src="form_139.png"/> the sequence continuation indicators <img class="formulaInl" alt="$ \delta $" src="form_140.png"/>. These inputs should be binary (0 or 1) indicators, where <img class="formulaInl" alt="$ \delta_{t,n} = 0 $" src="form_141.png"/> means that timestep <img class="formulaInl" alt="$ t $" src="form_89.png"/> of stream <img class="formulaInl" alt="$ n $" src="form_142.png"/> is the beginning of a new sequence, and hence the previous hidden state <img class="formulaInl" alt="$ h_{t-1} $" src="form_143.png"/> is multiplied by <img class="formulaInl" alt="$ \delta_t = 0 $" src="form_144.png"/> and has no effect on the cell's output at timestep <img class="formulaInl" alt="$ t $" src="form_89.png"/>, and a value of <img class="formulaInl" alt="$ \delta_{t,n} = 1 $" src="form_145.png"/> means that timestep <img class="formulaInl" alt="$ t $" src="form_89.png"/> of stream <img class="formulaInl" alt="$ n $" src="form_142.png"/> is a continuation from the previous timestep <img class="formulaInl" alt="$ t-1 $" src="form_146.png"/>, and the previous hidden state <img class="formulaInl" alt="$ h_{t-1} $" src="form_143.png"/> affects the updated hidden state and output.</li>
<li><img class="formulaInl" alt="$ (N \times ...) $" src="form_35.png"/> (optional) the static (non-time-varying) input <img class="formulaInl" alt="$ x_{static} $" src="form_147.png"/>. After the first axis, whose dimension must be the number of independent streams, its dimensions may be arbitrary. This is mathematically equivalent to using a time-varying input of <img class="formulaInl" alt="$ x'_t = [x_t; x_{static}] $" src="form_148.png"/> &ndash; i.e., tiling the static input across the <img class="formulaInl" alt="$ T $" src="form_136.png"/> timesteps and concatenating with the time-varying input. Note that if this input is used, all timesteps in a single batch within a particular one of the <img class="formulaInl" alt="$ N $" src="form_137.png"/> streams must share the same static input, even if the sequence continuation indicators suggest that difference sequences are ending and beginning within a single batch. This may require padding and/or truncation for uniform length.</li>
</ol>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">top</td><td>output <a class="el" href="classcaffe_1_1Blob.html" title="A wrapper around SyncedMemory holders serving as the basic computational unit through which Layers...">Blob</a> vector (length 1)<ol type="1">
<li><img class="formulaInl" alt="$ (T \times N \times D) $" src="form_149.png"/> the time-varying output <img class="formulaInl" alt="$ y $" src="form_13.png"/>, where <img class="formulaInl" alt="$ D $" src="form_150.png"/> is <code>recurrent_param.num_output()</code>. Refer to documentation for particular <a class="el" href="classcaffe_1_1RecurrentLayer.html" title="An abstract class for implementing recurrent behavior inside of an unrolled network. This Layer type cannot be instantiated – instead, you should use one of its implementations which defines the recurrent architecture, such as RNNLayer or LSTMLayer. ">RecurrentLayer</a> implementations (such as <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> and <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a>) for the definition of <img class="formulaInl" alt="$ y $" src="form_13.png"/>. </li>
</ol>
</td></tr>
  </table>
  </dd>
</dl>

<p>Implements <a class="el" href="classcaffe_1_1Layer.html#a576ac6a60b1e99fe383831f52a6cea77">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<a id="a4eec13bfbe23b1e3eb2bbc4652bd6952"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4eec13bfbe23b1e3eb2bbc4652bd6952">&#9670;&nbsp;</a></span>LayerSetUp()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classcaffe_1_1RecurrentLayer.html">caffe::RecurrentLayer</a>&lt; Dtype &gt;::LayerSetUp </td>
          <td>(</td>
          <td class="paramtype">const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;&#160;</td>
          <td class="paramname"><em>bottom</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;&#160;</td>
          <td class="paramname"><em>top</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Does layer-specific setup: your layer should implement this function as well as Reshape. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">bottom</td><td>the preshaped input blobs, whose data fields store the input data for this layer </td></tr>
    <tr><td class="paramname">top</td><td>the allocated but unshaped output blobs</td></tr>
  </table>
  </dd>
</dl>
<p>This method should do one-time layer specific setup. This includes reading and processing relevent parameters from the <code>layer_param_</code>. Setting up the shapes of top blobs and internal buffers should be done in <code>Reshape</code>, which will be called before the forward pass to adjust the top blob sizes. </p>

<p>Reimplemented from <a class="el" href="classcaffe_1_1Layer.html#a481323a3e0972c682787f2137468c29f">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<a id="a983e1ead91884f9d2049a3000254961c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a983e1ead91884f9d2049a3000254961c">&#9670;&nbsp;</a></span>MaxBottomBlobs()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual int <a class="el" href="classcaffe_1_1RecurrentLayer.html">caffe::RecurrentLayer</a>&lt; Dtype &gt;::MaxBottomBlobs </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the maximum number of bottom blobs required by the layer, or -1 if no maximum number is required. </p>
<p>This method should be overridden to return a non-negative value if your layer expects some maximum number of bottom blobs. </p>

<p>Reimplemented from <a class="el" href="classcaffe_1_1Layer.html#af8bdc989053e0363ab032026b46de7c3">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<a id="ac31b705bc02d333ae768f7c2184fbfae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac31b705bc02d333ae768f7c2184fbfae">&#9670;&nbsp;</a></span>MinBottomBlobs()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual int <a class="el" href="classcaffe_1_1RecurrentLayer.html">caffe::RecurrentLayer</a>&lt; Dtype &gt;::MinBottomBlobs </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the minimum number of bottom blobs required by the layer, or -1 if no minimum number is required. </p>
<p>This method should be overridden to return a non-negative value if your layer expects some minimum number of bottom blobs. </p>

<p>Reimplemented from <a class="el" href="classcaffe_1_1Layer.html#aca3cb2bafaefda5d4760aaebd0b72def">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<a id="aba6011a9cbb18e38a8596aa5dbb44723"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba6011a9cbb18e38a8596aa5dbb44723">&#9670;&nbsp;</a></span>Reshape()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classcaffe_1_1RecurrentLayer.html">caffe::RecurrentLayer</a>&lt; Dtype &gt;::Reshape </td>
          <td>(</td>
          <td class="paramtype">const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;&#160;</td>
          <td class="paramname"><em>bottom</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;&#160;</td>
          <td class="paramname"><em>top</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Adjust the shapes of top blobs and internal buffers to accommodate the shapes of the bottom blobs. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">bottom</td><td>the input blobs, with the requested input shapes </td></tr>
    <tr><td class="paramname">top</td><td>the top blobs, which should be reshaped as needed</td></tr>
  </table>
  </dd>
</dl>
<p>This method should reshape top blobs as needed according to the shapes of the bottom (input) blobs, as well as reshaping any internal buffers and making any other necessary adjustments so that the layer can accommodate the bottom blobs. </p>

<p>Implements <a class="el" href="classcaffe_1_1Layer.html#a7fe981e8af8d93d587acf2a952be563d">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>include/caffe/layers/<a class="el" href="lstm__layer_8hpp_source.html">lstm_layer.hpp</a></li>
<li>include/caffe/layers/<a class="el" href="recurrent__layer_8hpp_source.html">recurrent_layer.hpp</a></li>
<li>src/caffe/layers/recurrent_layer.cpp</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Aug 3 2017 23:11:28 for Caffe by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
